package LiKouBrushQuestions;

import java.util.HashSet;

public class JianZhiOffer_four_five {
    public static void main(String[] args) {
        FindMinChar findMinChar = new FindMinChar();
        char a = findMinChar.firstUniqChar("aadadaad");
        System.out.println(a);

    }
}

//在一个长度为 n 的数组 nums 里的所有数字都在 0～n-1 的范围内。数组中某些数字是重复的，但不知道有几个数字重复了，也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。
class RepeatNumberInArray {
    public int findRepeatNumber(int[] nums) {
        //这道题的解法是真的很巧妙
        int arrs[] = new int[nums.length];
        for (int i = 0; i < nums.length; i++) {
            arrs[nums[i]]++;
            if (arrs[nums[i]] > 1) {
                return nums[i];
            }
        }
        return -1;
    }
}

//在字符串 s 中找出第一个只出现一次的字符。如果没有，返回一个单空格。 s 只包含小写字母。
class FindMinChar {
    public char firstUniqChar(String s) {
//        char c;
//        if (s.equals(' ')) {
//            char s1 = ' ';
//            return s1;
//        }
//        for (int i = 0; i < s.length(); i++) {
//            c = s.charAt(i);
//            if (s.indexOf(c) == i && s.indexOf(c, i + 1) == -1) {
//                return c;
//            }
//        }
//        return ' ';

        if (s.length() == 0) {
            return ' ';
        }
//        HashSet<Character> record = new HashSet<Character>();
//        int i = 0;
//        int len = s.length();
//        while(i < len){
//            if (record.contains(s.charAt(i))){
//                s = s.replaceAll(String.valueOf(s.charAt(i)),"");
//                i=0;
//                record.clear();
//                System.out.println(s);
//                len = s.length();
//                continue;
//            } else {
//                record.add(s.charAt(i));
//            }
//            i++;
//        }
//        if (s.length()==0) {
//            return  ' ';
//        }
//        return s.charAt(0);
//
        int[][] record = new int[26][2];
        for (int i = 0; i < s.length(); i++) {
            // isExisted
            int[] cur = record[s.charAt(i) - 'a'];
            if (cur[0] == 0) {
                cur[1] = i;
            }
            cur[0]++;
        }
        int index = Integer.MAX_VALUE;
        for (int i = 0; i < 26; i++) {
            if (record[i][0] == 1) {
                index = Math.min(index, record[i][1]);
            }
        }
        if (index == Integer.MAX_VALUE){
            return ' ';
        }
        return s.charAt(index);
    }
}